package com.molichuxing.gateway.bff.order.services;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.gateway.bff.order.entity.response.*;
import com.molichuxing.services.property.OrderListTypeEnum;

import java.util.List;
import java.util.Map;

/**
 * 订阅里程订单相关bff
 * 
 * @author zoumingyu
 * @date 2019年8月13日
 *
 */
public interface OrderSubscribeBffService {

	/**
	 * 分页获取订阅里程订单信息
	 * 
	 * @param params
	 *            listType：列表类型-enum <br />
	 *            orderStatus：订单状态-enum <br />
	 *            orderCode：订单号-long <br />
	 *            userName：用户账号-string <br />
	 *            userRealName：用户姓名-string <br />
	 *            userPhone：用户手机号-string <br />
	 *            storeId：下单门店id-int <br />
	 *            orderTimeStart：下单开始时间-LocalDate <br />
	 *            orderTimeEnd：下单结束时间-LocalDate <br />
	 *            isHaveSuborder：有无续订-boolean
	 * @param dealerId
	 *            经销商id
	 * @param pageNum
	 *            页数
	 * @param pageSize
	 *            每页条数
	 * @return
	 */
	public Paged<OrderSubscribeVo> getOrderList(Map<String, Object> params, Integer dealerId, int pageNum, int pageSize)
			throws Exception;

	/**
	 * 获取订阅里程订单交易流程
	 * 
	 * @param orderCode
	 *            订单号
	 * @param listType：列表类型-enum
	 * 
	 * @return
	 * @throws Exception
	 */
	public List<OrderTradeFlowVo> getOrderTradeFlow(Long orderCode, OrderListTypeEnum listType)
			throws Exception;

	/**
	 * 获取订单基础信息(包含续订单)
	 *
	 * @param orderCode  订单号
	 * @param isSuborder 是否查询的是续订单
	 * @param result     结果
	 * @return
	 * @throws Exception
	 */
	public List<OrderSubscribeBaseVo> getOrderBaseList(Long orderCode, Boolean isSuborder,
	                                                   List<OrderSubscribeBaseVo> result, int num) throws Exception;

	public List<OrderSubscribeBaseVo> getOrderBaseList(Long orderCode, List<OrderSubscribeBaseVo> result) throws Exception;

	/**
	 * 获取用车实况信息
	 *
	 * @param orderCode 订单号
	 * @return
	 * @throws Exception
	 */
	public OrderUsedCarVo getOrderUsedCar(Long orderCode) throws Exception;

	/**
	 * 获取订单费用交易明细
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 */
	public List<OrderCostDetailsVo> getOrderCostDetails(Long orderCode);
}
